package com.gqz.equip.utils;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * @Description 日期工具类
 **/
public class DateUtils {

    private static final float DAYS_SPAN_FACTOR = 1000 * 3600 * 24f;

    /**
     * 日期时间24小时制格式("yyyy-MM-dd HH:mm:ss")
     */
    public static final String DATE_TIME_24_FORMAT = "yyyy-MM-dd HH:mm:ss";

    /**
     * 日期格式("yyyy-MM-dd")
     */
    public static final String DATE_FORMAT = "yyyy-MM-dd";

    /**
     * 毫秒格式1
     */
    public static final String DATE_MSEC_FORMAT1 = "yyyy-MM-dd HH-mm-ss-SSS";

    /**
     * 毫秒格式2
     */
    public static final String DATE_MSEC_FORMAT2 = "yyyyMMddHHmmssSSS";

    /**
     * 格式化日期，自定义格式
     *
     * @param date       日期
     * @param dateFormat 日期格式
     * @return 格式化结果
     */
    public static String formatDate(Date date, String dateFormat) {
        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
        if (date == null) {
            return "";
        }
        return sdf.format(date);
    }

    /**
     * 日期相差天数
     *
     * @param smdate 开始日期
     * @param bdate  结束日期
     * @return 相差天数
     */
    public static int daysBetween(Date smdate, Date bdate) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(smdate);
        long time1 = cal.getTimeInMillis();
        cal.setTime(bdate);
        long time2 = cal.getTimeInMillis();
        int betweenDays = (int) ((time2 - time1) / DAYS_SPAN_FACTOR);

        return Math.abs(betweenDays);
    }

    /**
     * 获取加减天数后的日期
     *
     * @param cdate 日期
     * @param num   天数
     * @return 结果日期
     */
    public static Date addDate(Date cdate, int num) {
        Calendar ec = Calendar.getInstance();
        ec.setTime(cdate);
        ec.add(Calendar.DATE, num);
        return ec.getTime();
    }

}
